home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 1.iso / toolbox / src / exampleCode / opengl / 2Dwrap / ogl / main.c < prev    next >
C/C++ Source or Header  |  1996-11-11  |  6KB  |  203 lines

  1. /*
  2.  * Copyright (c) 1995, Silicon Graphics, Inc.
  3.  *
  4.  * Permission to use, copy, modify, distribute, and sell this software and
  5.  * its documentation for any purpose is hereby granted without fee, provided
  6.  * that the name of Silicon Graphics may not be used in any advertising or
  7.  * publicity relating to the software without the specific, prior written
  8.  * permission of Silicon Graphics.
  9.  *
  10.  * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
  11.  * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
  12.  * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  13.  *
  14.  * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
  15.  * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
  16.  * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF THE
  17.  * POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN
  18.  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19.  *
  20.  * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
  21.  */
  22. /*----------------------------------------------------------------------------
  23.  *
  24.  * example showing how to use the porting layer for arcs
  25.  *
  26.  * Author : Yusuf Attarwala
  27.  *          SGI - Applications
  28.  * Date   : Apr 95
  29.  *
  30.  *
  31.  *---------------------------------------------------------------------------*/
  32. #include <stdio.h>
  33. #include <stdlib.h>
  34. #include <string.h>
  35.  
  36. #include <Xm/Xm.h> 
  37. #include <Xm/Frame.h>               /* for frame widgets */
  38. #include <Xm/Form.h>                /* for frame widgets */
  39. #include <X11/keysym.h>             /* keyboard translations */
  40. #include <X11/StringDefs.h>
  41.  
  42. #include <GL/gl.h>                  /* gl includes */
  43. #include <GL/glu.h>                 /* utility library includes */
  44. #include <GL/GLwMDrawA.h>           /* include for the drawing area widget */
  45.  
  46. #include "twodwrap.h"
  47.  
  48. /* function declarations */
  49.  
  50. void 
  51.     createToplevel(void),
  52.     drawScene(void),
  53.     setMatrix(void),
  54.     exposeCB(Widget,XtPointer,XtPointer),
  55.     resizeCB(Widget,XtPointer,XtPointer),
  56.     initCB(Widget,XtPointer,XtPointer);
  57.  
  58.  
  59. /* global variables */
  60.             
  61. Display       *display;             /* current display */
  62. XtAppContext  appContext;           /* X application context */
  63.  
  64. Widget        toplevel,       /* toplevel shell */
  65.               glw;            /* current widget */
  66.              
  67. GLXContext    glxc;           /* current glx context */
  68.  
  69. Arg args[20];
  70. int acnt;
  71.  
  72. void 
  73. main(int argc, char** argv)
  74. {
  75.     XtToolkitInitialize();
  76.     appContext = XtCreateApplicationContext();
  77.     display    = XtOpenDisplay(appContext, NULL, "Olight","olight",NULL,0,
  78.                               &argc,argv);
  79.     createToplevel();             /* create widget hierarchy */
  80.     XtAppMainLoop(appContext);    /* loop forever */
  81. }
  82.  
  83.  
  84. void
  85. createToplevel(void)
  86. {
  87.     Widget frame;
  88.  
  89.     acnt = 0;
  90.     XtSetArg(args[acnt],XmNminHeight, 300);acnt++;
  91.     XtSetArg(args[acnt],XmNminWidth,  300);acnt++;
  92.     XtSetArg(args[acnt],XmNminAspectX,  1);acnt++;
  93.     XtSetArg(args[acnt],XmNminAspectY,  1);acnt++;
  94.     XtSetArg(args[acnt],XmNmaxAspectX,  1);acnt++;
  95.     XtSetArg(args[acnt],XmNmaxAspectY,  1);acnt++;
  96.     toplevel  = XtAppCreateShell("openGL arc","oarc",
  97.                                   applicationShellWidgetClass,
  98.                                   display,args,acnt);
  99.  
  100.     /* create a frame to hold glx widget */
  101.     frame   = XtVaCreateManagedWidget("frame", 
  102.                   xmFrameWidgetClass, toplevel, 
  103.                   NULL);
  104.  
  105.     /* create a double buffer widget, in rgb mode and manage it */
  106.     acnt = 0;
  107.     XtSetArg(args[acnt], GLwNrgba,               TRUE); acnt++;
  108.     XtSetArg(args[acnt], GLwNredSize,            1); acnt++;
  109.     XtSetArg(args[acnt], GLwNgreenSize,          1); acnt++;
  110.     XtSetArg(args[acnt], GLwNblueSize,           1); acnt++;
  111.     XtSetArg(args[acnt], GLwNdoublebuffer,       TRUE); acnt++;
  112.     XtSetArg(args[acnt], GLwNallocateBackground, TRUE); acnt++;
  113.     glw = GLwCreateMDrawingArea(frame, "glw", args, acnt);
  114.     XtManageChild(glw);
  115.  
  116.     /* register callbacks */
  117.     XtAddCallback(glw, GLwNginitCallback,  initCB,   NULL);
  118.  
  119.     /* realize widget hierarchy */
  120.     XtRealizeWidget(toplevel);
  121.  
  122.     /* additional callbacks */
  123.     XtAddCallback(glw, GLwNexposeCallback, exposeCB, NULL);
  124.     XtAddCallback(glw, GLwNresizeCallback, resizeCB, NULL);
  125.  
  126. }
  127.  
  128. void
  129. drawScene(void)
  130. {
  131.     glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  132.  
  133.     glColor3f(1.0,1.0,0);
  134.     arcf(-5.,-5.6,4.0,2700,0);
  135.  
  136.     glColor3f(0,1.0,1.0);
  137.     arc(5.,5.,3.0,1800,900);
  138.  
  139.     glColor3f(1.0,1.0,1.0);
  140.     circf(-5.,5.,3.0);
  141.  
  142.     glColor3f(1.0,0.0,0.0);
  143.     arci(5,-5,3,1000,2000);
  144.  
  145.     glColor3f(1.0,1.0,0.0);
  146.     rect(-1.,-1.,2.0,2.0);
  147.  
  148.     glColor3f(0.0,1.0,0.0);
  149.     sboxf(2.,2.,3.5,3.5);
  150.  
  151.     glFlush();
  152.     glXSwapBuffers(XtDisplay(glw), XtWindow(glw));
  153.  
  154. }
  155.  
  156. void
  157. setMatrix(void)
  158. {
  159.     glMatrixMode(GL_PROJECTION);
  160.     glLoadIdentity();
  161.     gluOrtho2D(-10.0,10.0,-10.0,10.0);
  162.     glMatrixMode(GL_MODELVIEW);
  163.     glLoadIdentity();
  164. }
  165.  
  166. void 
  167. resizeCB(Widget w, XtPointer client_data, XtPointer call)
  168. {
  169.     GLwDrawingAreaCallbackStruct *call_data;
  170.     call_data = (GLwDrawingAreaCallbackStruct *) call;
  171.  
  172.  
  173.     GLwDrawingAreaMakeCurrent(w, glxc);
  174.     glViewport(0, 0, call_data->width, call_data->height);
  175.     setMatrix();
  176.     drawScene();
  177. }
  178.  
  179. void 
  180. exposeCB(Widget w, XtPointer client_data, XtPointer call)
  181. {
  182.     GLwDrawingAreaCallbackStruct *call_data;
  183.     call_data = (GLwDrawingAreaCallbackStruct *) call;
  184.  
  185.     GLwDrawingAreaMakeCurrent(w, glxc);
  186.     glViewport(0, 0, call_data->width, call_data->height);
  187.     drawScene();
  188. }
  189.  
  190. void
  191. initCB(Widget w, XtPointer client_data, XtPointer call)
  192. {
  193.     XVisualInfo *vi;
  194.  
  195.     XtSetArg(args[0], GLwNvisualInfo, &vi);
  196.     XtGetValues(w, args, 1);
  197.  
  198.     glxc = glXCreateContext(XtDisplay(w), vi, 0, GL_TRUE);
  199.  
  200.     glClearColor(0.0, 0.0, 0.0, 0.0);
  201. }
  202.  
  203.